# uncompyle6 version 3.2.3
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.6.8 |Anaconda custom (64-bit)| (default, Feb 21 2019, 18:30:04) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: site-packages\sqlalchemy\engine\util.py
from .. import util


def connection_memoize(key):
    """Decorator, memoize a function in a connection.info stash.
    
    Only applicable to functions which take no arguments other than a
    connection.  The memo will be stored in ``connection.info[key]``.
    """

    @util.decorator
    def decorated(fn, self, connection):
        connection = connection.connect()
        try:
            return connection.info[key]
        except KeyError:
            connection.info[key] = val = fn(self, connection)
            return val

    return decorated


def py_fallback():
    def _distill_params(multiparams, params):
        """Given arguments from the calling form *multiparams, **params,
        return a list of bind parameter structures, usually a list of
        dictionaries.
        
        In the case of 'raw' execution which accepts positional parameters,
        it may be a list of tuples or lists.
        
        """
        if not multiparams:
            if params:
                return [params]
            return []
        else:
            if len(multiparams) == 1:
                zero = multiparams[0]
                if isinstance(zero, (list, tuple)):
                    if (
                        not zero
                        or hasattr(zero[0], "__iter__")
                        and not hasattr(zero[0], "strip")
                    ):
                        return zero
                    return [zero]
                else:
                    if hasattr(zero, "keys"):
                        return [zero]
                    return [[zero]]
            else:
                if hasattr(multiparams[0], "__iter__"):
                    if not hasattr(multiparams[0], "strip"):
                        return multiparams
                    return [multiparams]

    return locals()


try:
    from sqlalchemy.cutils import _distill_params
except ImportError:
    globals().update(py_fallback())
